
module.exports = (sequelize, DataTypes,Deferrable,model) => {
   return sequelize.define('article', {
      id: {
         type: DataTypes.STRING,
         primaryKey: true,
         allowNull: true,
         autoIncrement: false
         // autoIncrement: false
      },
      //文章标题
      articleTitle: {
         type: DataTypes.STRING,
         allowNull: false,
         field:'article_title'

      },
      //文章内容
      articleContent: {
         type: DataTypes.STRING,
         allowNull: false,
         field:'article_content'

      },
      // 所属分类id
      categoryId: {
         type: DataTypes.STRING,
         allowNull: false,
         field:'category_id',
         references: {
            // 这是对另一个模型的参考
            model,
            // 这是引用模型的列名
            key: 'id',
            // 使用 PostgreSQL,可以通过 Deferrable 类型声明何时检查外键约束.
            deferrable: DataTypes.INITIALLY_IMMEDIATE
            // 参数:
            // - `Deferrable.INITIALLY_IMMEDIATE` - 立即检查外键约束
            // - `Deferrable.INITIALLY_DEFERRED` - 将所有外键约束检查推迟到事务结束
            // - `Deferrable.NOT` - 完全不推迟检查(默认) - 这将不允许你动态更改事务中的规则
          }
      },
      isDelete:{
         type:DataTypes.BOOLEAN,
         field:'is_delete',
         defaultValue:false
      },
      //   创建人
      created_by: {
         type: DataTypes.STRING,
      },
      //   创建人id
      created_id: {
         type: DataTypes.STRING,
      },
      //   更新人
      update_by: {
         type: DataTypes.STRING,
      },
      //   更新人id
      update_id: {
         type: DataTypes.STRING,
      },
      updatedAt:{
         type:DataTypes.DATE,
         field:'update_time'

      },
      createdAt:{
         type:DataTypes.DATE,
         field:'create_time'
      }
   }, {
      /**
       * 如果为true，则表示名称和model相同，即user
       * 如果为fasle，mysql创建的表名称会是复数，即users
       * 如果指定的表名称本身就是复数，则形式不变
       */
      freezeTableName: true,
      timestamps: true
   });
}